# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:gongbao_qg2_0.py
@Time:2024/9/5 7:31

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""

from bs4 import BeautifulSoup
import requests
import html2text
import re
from gongbao_quanguo.url2list import url_list, extract_reports


#爬虫，正文页内容，class_ 个性化代码，可以作为参数传入
def url2docx(url):
    # 发送请求
    response = requests.get(url)

    # 检查请求是否成功
    if response.status_code == 200:
        response.encoding = "utf-8"  # 设置正确的编码
        # 解析 HTML，得到soup
        soup = BeautifulSoup(response.text, 'html.parser')
        # pattern = re.compile(
        #     r'TRS_PreAppend|view TRS_UEDITOR trs_paper_default trs_word|TRS_Editor|view TRS_UEDITOR trs_paper_default trs_external|detail-text-content mhide')
        # 找到包含公报内容的 div 元素（这里需要根据实际 HTML 结构修改选择器）
        # 假设公报内容在一个特定的 class 为'content'的 div 中
        # pattern = re.compile(r'TRS_PreAppend')
        # reports_div = soup.find('div', class_='TRS_PreAppend')  # 修改这里的 class_值以匹配你的 HTML
        # 得到‘div’ 正文html，转为字符串返回
        reports_div = soup.find('div', class_='detail-text-content mhide')
        return str(reports_div)

#转换文件中的中文为阿拉伯数字
def chinese_year_to_arabic(year_str):
    # 映射中文数字到阿拉伯数字
    chinese_digit_map = {
        '〇': '0', '零': '0', '○': '0',
        '一': '1', '二': '2', '两': '2', '三': '3', '四': '4', '五': '5',
        '六': '6', '七': '7', '八': '8', '九': '9', '十': '10'
    }

    # 将中文年份字符串转换为阿拉伯数字
    try:
        # 替换中文数字为阿拉伯数字
        arabic_str = ''
        for char in year_str:
            if char in chinese_digit_map:
                arabic_str += chinese_digit_map[char]
            elif char == '十':
                # 如果遇到“十”，则将前一个数字乘以10
                if arabic_str and arabic_str[-1].isdigit():
                    arabic_str = arabic_str[:-1] + str(int(arabic_str[-1]) * 10)
                else:
                    arabic_str += '10'  # 特殊处理“十”本身的情况

        # 将结果字符串转换为整数
        return str(int(arabic_str))
    except Exception as e:
        print(f"Error converting year {year_str}: {e}")
        return year_str

#处理标题，个性化代码
def handle_title(text):
    # 处理得到标题
    # 处理前三行，得到标题，作为文件名，*、空格、“国家统计局关于”去掉
    title = (text.split('\n')[0] + text.split('\n')[1] + text.split('\n')[2]).replace('*', '').replace(' ', '').replace(
        '国家统计局关于', '')
    # 最右边的‘中华人民共和国国家统计局’‘国家统计局’去掉
    title = re.sub(r"\[\d+\]", "", title).rstrip('中华人民共和国国家统计局').rstrip('国家统计局')
    # 2007前加辍‘中华人民共和国’
    prefix = '中华人民共和国'
    if title.startswith('2007'):
        title = f"{prefix}{title}"
    # 中文年份数字替换为阿拉伯数字
    year_pattern = re.compile(r"(一九|二零)[\d○一二三四五六七八九十]{2,3}年")
    match = year_pattern.search(title)
    if match:
        year_str = match.group(0)
        arabic_year = chinese_year_to_arabic(year_str)
        title = title.replace(year_str, arabic_year)

    # print(title)
    return title


#将爬取的html转为txt文本文件，用html2text库
def html2txt(url):
    #取得html
    html_text = url2docx(url)
    # print(url2docx(url))
    h = html2text.HTML2Text()
    #忽略图片
    h.ignore_images = True
    # h.pad_tables = True
    text = h.handle(html_text)
    #处理title
    title = handle_title(text)
    #写入txt文件
    with open(f'gongbao_quanguo/output_txt/{title}.txt', 'w', encoding='utf-8') as txt_file:
        txt_file.write(text)
    # print(type(text))
    # print(text)

# url = 'https://www.stats.gov.cn/sj/zxfb/202402/t20240228_1947915.html'  # 注意：这里是一个示例 URL，请替换为实际 URL
# url = 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/202302/t20230206_1901956.html'
# url = 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/202302/t20230206_1901921.html'




# html2txt(url)

base_url = 'https://www.stats.gov.cn/sj/tjgb/ndtjgb/qgndtjgb/'
num_pages = 4  # 总页数

#生成链接列表
urls = url_list(base_url,num_pages)
for url in urls:
    #获取报告链接
    article_list = extract_reports(base_url,url)
    # print(article_list)
    if article_list:
        for article in article_list:
            print(article[0],article[1])
            html2txt(article[1])
    else:
        print('文件列表为空！')